home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / dev / amos / Mazer.lha / RainMazer.AMOS / RainMazer.amosSourceCode < prev    next >
AMOS Source Code  |  1999-04-28  |  2KB  |  110 lines

  1. 'This program creates mazes! 
  2. '
  3. Dim MAZE(6,6),FLAGS(6,6)
  4. For B=0 To 6
  5.    For A=0 To 6
  6.       FLAGS(A,B)=15
  7.    Next 
  8. Next 
  9. For A=0 To 6
  10.    Add FLAGS(A,0),-1 : Rem No N exit on N row 
  11.    Add FLAGS(6,A),-2 : Rem No E exit on E row 
  12.    Add FLAGS(A,6),-4 : Rem No S exit on S row 
  13.    Add FLAGS(0,A),-8 : Rem No W exit on W row 
  14. Next 
  15. Dim DIX(3),DIY(3)
  16. DIY(0)=-1 : DIX(1)=1 : DIY(2)=1 : DIX(3)=-1
  17. '
  18. 'Here we go... 
  19. '
  20. FIRST=True : Randomize Timer
  21. GO1:
  22. '
  23. Ink 0 : Rem Every time to draw maze! 
  24. If FIRST
  25.    Curs Off : Hide On : Paper 2 : Cls : No Mask 
  26. Else 
  27.    For A=0 To 6 : For B=0 To 6 : MAZE(A,B)=0 : Next : Next 
  28. End If 
  29. '
  30. For A=0 To 133 Step 19
  31.    Draw A,0 To A,133 : Draw 0,A To 133,A
  32. Next 
  33. Ink 2
  34. '
  35. 'Start position
  36. '
  37. X=Rnd(6) : Y=Rnd(6) : VISITED=0
  38. '
  39. Do 
  40.    If VISITED=48 Then Goto SLUTT
  41.    BX=X*19+2 : BY=Y*19+2
  42.    Paste Bob BX,BY,1
  43.    NX=BX : NY=BY
  44.    '
  45.    DI=Rnd(3) : OD=DI : D$=""
  46.    'Build list of exits 
  47.    For T=1 To 4 : P2=2^DI
  48.       If(FLAGS(X,Y) and P2)=P2
  49.          If MAZE(X+DIX(DI),Y+DIY(DI))=0
  50.             D$=D$+Chr$(DI+64)
  51.          End If 
  52.       End If 
  53.       Add DI,1,0 To 3
  54.    Next 
  55.    If D$>""
  56.       'Pick and move 
  57.       DI=Asc(D$)-64 : P2=2^DI : NX=BX+19*DIX(DI) : NY=BY+19*DIY(DI)
  58.       FLYTT
  59.       MAZE(X,Y)=MAZE(X,Y) or P2
  60.       Add X,DIX(DI) : Add Y,DIY(DI)
  61.       DI=(DI+2) and 3
  62.       MAZE(X,Y)=MAZE(X,Y) or(2^DI)
  63.       Inc VISITED
  64.    Else 
  65.       'Scan for used room
  66.       Repeat 
  67.          Wait 2
  68.          Bar BX,BY To BX+15,BY+15
  69.          Add X,1,0 To 6
  70.          If X=0 : Add Y,1,0 To 6 : End If 
  71.          BX=X*19+2 : BY=Y*19+2
  72.          Paste Bob BX,BY,1
  73.       Until MAZE(X,Y)>0
  74.    End If 
  75. Loop 
  76. '
  77. Procedure FLYTT
  78.    Shared BX,BY,NX,NY
  79.    If NX<>BX
  80.       D=(NX-BX) : D=D/Abs(D)
  81.       Repeat : Add BX,D : Paste Bob BX,BY,1 : Wait Vbl : Until BX=NX
  82.    End If 
  83.    If NY<>BY
  84.       D=(NY-BY) : D=D/Abs(D)
  85.       Repeat : Add BY,D : Paste Bob BX,BY,1 : Wait Vbl : Until BY=NY
  86.    End If 
  87. End Proc
  88. SLUTT:
  89. Wait 25
  90. Bar BX,BY To BX+15,BY+15
  91. '
  92. 'Store the maze and go back for another
  93. '
  94. If Exist("Mazes")
  95.    Append 1,"Mazes"
  96. Else 
  97.    Open Out 1,"Mazes"
  98. End If 
  99. For B=0 To 6 : For A=0 To 6
  100.       Print #1,Chr$(MAZE(A,B)+64);
  101. Next : Next 
  102. Print #1,""
  103. Close 
  104. FIRST=False
  105. Pen 0 : Print At(2,17);"Another? y/n"
  106. X$=Inkey$ : X$=""
  107. While X$="" : X$=Lower$(Inkey$) : Wend 
  108. If X$="y" Then Print At(2,17);Space$(12) : Goto GO1
  109. Default 
  110. Print : Centre "Okay then... later!" : Print